<?php
class CPayRequest
{
	const URL_TEST            = 'http://193.200.10.117:8080/cgi-bin/cgi_link';
	const URL_PRODUCTION      = 'https://3ds.payment.ru/cgi-bin/cgi_link';
	const TRTYPE_PAY          = 1;
	const TRTYPE_CANCEL       = 22;
	const TRTYPE_PREAUTH      = 0;
	const TRTYPE_FINISH       = 21;
	const RESULT_SUCCESS      = 0;
	const RESULT_REPEAT       = 1;
	const RESULT_BANK_CANCEL  = 2;
	const RESULT_PAYGW_CANCEL = 3;
	const KEY_TEST            = 'C50E41160302E0F5D6D59F1AA3925C45';
	const MERCH_NAME_TEST     = 'test';
	const MERCHANT_TEST       = '790367686219999';
	const BACKREF_TEST        = 'http://raybt.ru/payment/';
	const TERMINAL_TEST       = '79036861';

	public $amount; // double(1-11) Сумма операции
	public $currency; // str(3) 'RUB' Валюта операции
	public $order; // int(6-20) Уникальный номер заказа
	public $desc; // str(50) Описание заказа
	public $terminal; // int(8) Уникальный номер виртуального терминала торговой точки
	public $trtype; // int(1-2) тип запрашиваемой операции
	public $merch_name; // str(50) Название торговой точки
	public $merchant; // int(12-15) Номер торговой точки
	public $email; // str(3-80) Адрес эл.почты Торговой точки
	public $timestamp; // int(14) UTC время проведения/обработки операции в формате YYYYMMDDHHMISS
	public $nonce; // str(16-32) Случайное число в шестнадцатеричном формате
	public $backref; // str(1-250) URL для возврата на сайт Торговой точки после проведения операции
	public $p_sign; // str(40) HMAC запроса/ответа
	public $rc; // str(1-2) Response Code Код ответа на попытку проведения операции
	public $rctext; // str(1-250) Response Code Text Расшифровка кода ответа на попытку проведения операции
	public $authcode; // str(6-32) Код авторизации. Буквенно цифровой код, выдаваемый банком, выпустившим карту, в случае успешной попытки проведения операции
	public $rrn; // int(12) Retrieval Reference Number Уникальный идентификатор запроса на списание средств с карты
	public $int_ref; // str(1-32) Interval Reference Уникальный идентификатор операции на платежном шлюзе
	public $result; // int(1) 0-успешно, 1-повторный запрос, 2-отключен банком, 3-отклонен платежным шлюзом
	public $org_amount; // double(1-11) Сумма оригинальной операции (сумма оплаты или предавторизации)
	public $name; // str(1-250) Имя держателя карты
	public $card; // str(1-250) Маскированный номер карты

	public function __construct()
	{
		$this->currency  = "RUB";
		$this->order     = self::getTimestamp();
		$this->timestamp = self::getTimestamp();
		$this->nonce     = self::getNonce();
	}

	public static function getTimestamp()
	{
		return gmdate( "YmdHis", time() );
	}

	public static function getNonce()
	{
		return md5( self::getTimestamp() );
	}

	public static function _post( $url, $content, $get_info = false )
	{
		$curl = curl_init( $url );
		curl_setopt_array( $curl, array(
			CURLOPT_HEADER         => false,
			CURLOPT_RETURNTRANSFER => false,
			CURLOPT_HTTPHEADER     => array( "Content-type: application/x-www-form-urlencoded; charset=utf-8" ),
			CURLOPT_POST           => true,
			CURLOPT_POSTFIELDS     => $content,
			CURLOPT_SSL_VERIFYPEER => false,
			CURLOPT_SSL_VERIFYHOST => false,
		) );
		$json_response = curl_exec( $curl );
		if ( !$json_response )
			$json_response = curl_error( $curl );
		if ( $get_info )
			$info = curl_getinfo( $curl );
		curl_close( $curl );
		return $get_info ? array( $json_response, $info ) : $json_response;
	}
}